﻿using Loki.Commands;

namespace Luna.UI
{
    public static class LunaCommands
    {
        public static class Names
        {
            public static class Navigation
            {
                public static class Account
                {
                    public const string ADMIN = "Navigation.Account.Accounts";

                    public const string REPORTING = "Navigation.Account.Reporting";

                    public const string CATEGORIES = "Navigation.Account.Categories";

                    public const string LOAD = "Navication.Account.Load";
                }

                public static class Projects
                {
                    public const string LIST = "Navigation.Project.List";

                    public const string REPORTING = "Navigation.Project.Reporting";
                }

                public static class User
                {
                    public const string ADMIN = "Navigation.User.List";
                }

                public static class Directory
                {
                    public const string CONTACTS = "Navigation.Directory.Contacts";

                    public const string COMPANIES = "Navigation.Directory.Companies";
                }
            }

            public static class Application
            {
                public const string LOAD = "Application.Load";
            }
        }

        public static class Application
        {
            private static CommandManager _Manager;

            static Application()
            {
                _Manager = new CommandManager();

                LOAD = _Manager.Create(Names.Application.LOAD);
            }

            public static readonly ICommand LOAD;
        }

        public static class Navigation
        {
            public static class User
            {
                private static CommandManager _Manager;

                static User()
                {
                    _Manager = new CommandManager();

                    ADMIN = _Manager.Create(Names.Navigation.User.ADMIN);
                }

                public static readonly ICommand ADMIN;
            }

            public static class Directory
            {
                private static CommandManager _Manager;

                static Directory()
                {
                    _Manager = new CommandManager();

                    CONTACTS = _Manager.Create(Names.Navigation.Directory.CONTACTS);
                    COMPANIES = _Manager.Create(Names.Navigation.Directory.COMPANIES);
                }

                public static readonly ICommand CONTACTS;

                public static readonly ICommand COMPANIES;
            }

            public static class Project
            {
                private static CommandManager _Manager;

                static Project()
                {
                    _Manager = new CommandManager();

                    LIST = _Manager.Create(Names.Navigation.Projects.LIST);
                    REPORTING = _Manager.Create(Names.Navigation.Projects.REPORTING);
                }

                public static readonly ICommand LIST;

                public static readonly ICommand REPORTING;
            }

            public static class Account
            {
                private static CommandManager _Manager;

                static Account()
                {
                    _Manager = new CommandManager();

                    ADMIN = _Manager.Create(Names.Navigation.Account.ADMIN);
                    REPORTING = _Manager.Create(Names.Navigation.Account.REPORTING);
                    CATEGORIES = _Manager.Create(Names.Navigation.Account.CATEGORIES);
                    LOAD = _Manager.Create(Names.Navigation.Account.LOAD);
                }

                public static readonly ICommand ADMIN;

                public static readonly ICommand REPORTING;

                public static readonly ICommand CATEGORIES;

                public static readonly ICommand LOAD;
            }
        }
    }
}
